package com.yujiahao.bigdata.rdd.transform

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

/**
 *  TODO RDD--glom 算子
       1、glom算子可以将一个分区的数据组合变成一个整体使用，可以调用集合的很多功能。
       2、将同一个分区的数据直接转换为相同类型的内存数组进行处理，分区不变
       3、问题在于处理时，会将一个分区的数据全部加载到内存，形成集合，那么内存不够
 */

object Spark_RDD_Pper_Transform_Glom {
  def main(args: Array[String]): Unit = {


    //TODO 1、获得连接
    val conf: SparkConf = new SparkConf().setAppName("WordCount").setMaster("local")
    val sc: SparkContext = new SparkContext(conf)

    //TODO 3、业务逻辑 测试将同一个分区的数据直接转换为相同类型的内存数组进行处理，分区不变
    val oldRdd: RDD[Int] = sc.makeRDD(List(1, 2, 3, 4), 2)
    //3.1 测试分区是否会变，转换前的分区,注意重新测试要删除已有的同
    oldRdd.saveAsTextFile("output")
    //3.2 测试glom转换算子

    val newRdd: RDD[Array[Int]] = oldRdd.glom()

    //3.3 测试转换后的分区是否会发生改变,注意重新测试要删除已有的同名文件
    newRdd.saveAsTextFile("output1")

    //TODO 4、打印遍历
    oldRdd.collect().foreach(println)
    println("----------------分割线----------------")
    newRdd.collect().foreach(println)
    //TODO 2、关闭连接
    sc.stop()
  }
}